package ln.javatest.day12.demo02;
/*
HashMap存储自定义类型键值
Map集合保证key是唯一的：
    作为key的元素，必须重写hashCode方法和equals方法，以保证key唯一
*/
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Demo01HashMapSavePerson {
    public static void main(String[] args) {
        show01();
        show02();
    }
    /*
        HashMap存储自定义类型的键值
        key：Person1类型
            Person1类就必须重写hashCode和equals方法，以保证key唯一
        value：String （可以重复）
        */
    private static void show02() {
        //创建HashMap集合
        HashMap<Person1, String> map2 = new HashMap<>();
        //往集合中添加元素
        map2.put(new Person1("王嘉尔", 20), "北京");
        map2.put(new Person1("易烊千玺", 23), "上海");
        map2.put(new Person1("王嘉尔", 20), "深圳");
        map2.put(new Person1("熊丰", 20), "北京");
        //使用entrySet(取出多个对象）加增强for遍历Map1集合
        Set<Map.Entry<Person1, String>> set1 = map2.entrySet();
        for (Map.Entry<Person1, String> entry : set1) {
            Person1 key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key + "," + value);
        }
    }

    /*
    HashMap存储自定义类型键值
    key：String类型
        String类重写了hashCode方法和equals方法，所以不需要我们重写，保证key的唯一
    value：Person类型
        value可以重复（同名同年龄的人视为同一个人）
    */
    private static void show01() {
        //创建HashMap集合
        HashMap<String, Person> map1 = new HashMap<>();
        //往集合中添加元素
        map1.put("北京", new Person("王嘉尔", 20));
        map1.put("上海", new Person("易烊千玺", 23));
        map1.put("深圳", new Person("王嘉尔", 20));
        map1.put("北京", new Person("熊丰", 20));
        //使用keySet(返回key值）加增强for遍历Map集合
        Set<String> set = map1.keySet();
        for (String key : set) {
            Person value = map1.get(key);
            System.out.println(key + "," + value);
        }



    }
}
